<?php

/**
 * ProdutoController
 * 
 * @author Voitech
 * @version 1.0
 */
class ProdutoController extends Zend_Controller_Action {
	public function init(){
            parent::init();
            $this->view->tituloPagina = "Controle de Produto";
        }
	/**
	 * The default action - show the home page
	 */
	public function indexAction() {
            $form = new App_Form_Pesquisa();
            $form->montaTipoBusca(array('no_produto'=>'Produto','co_produto'=>'Cód. Produto'));

            $obCategoriaRepositorio = new App_Model_CategoriaRepository();
            $selectBox = new Zend_Form_Element_Select( 'co_categoria' );
            $selectBox->setLabel('Categoria:');
            $selectBox->setAttribs( array('class'=> 'last-child' ) );
            $selectBox->setDecorators( $form->_decoratorLeft );
            $selectBox->addMultiOptions( Voitech_Util::converteModeloArrayCombo($obCategoriaRepositorio->listarTodos(array('st_ativo'=>'s'))
                                        , 'CoCategoria', 'NoCategoria', 1) );
            $selectBox->addFilters( array('StringTrim','StripTags') );

            $form->addElement($selectBox);

            $form->setSituacao();
            $form->setAction('javascript:;');
            $form->show();
            $this->view->form = $form;
	}
	
	/**
	 * Metodo que lista os produtoes
	 * 
	 * @access 	public
	 * @param 	co_produto
	 * @param 	no_produto
         * @param       co_categoria
	 * @param 	st_ativo
	 * @return 	zend_paginator
	 */
	public function listarAction(){
		$this->_helper->layout->disableLayout();			
		try {
                    if ($this->getRequest()->isPost()) {				  
                        $arrParam = array($this->_getParam('tipo_busca') => $this->_getParam('palavra_chave')
                                         ,'st_ativo'=>$this->_getParam('st_ativo')
                                         ,'co_categoria'=>$this->_getParam('co_categoria'));
                        $obRepository = new App_Model_ProdutoRepository();
                        $paginator = new Voitech_Paginator($obRepository->listarTodos($arrParam),$this->_getParam( 'list' ),$this->_getParam('page'));		       					    	
                        $this->view->paginator	= $paginator->paginar(10);
                        $this->view->div_id 	= 'div_listar_produto';
                        $this->view->dataType 	= "post";
                        $this->view->frmName	= "frmPesquisar";
                    }			
		}catch (Voitech_ExceptionValidate $e) {
		    echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'Favor preencher corretamente os dados obrigatórios'));
		}catch (Voitech_Exception $e) {
		    echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
		}catch (Exception $e) {
                    Voitech_Log::gerarLog($e->getMessage());
		    echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>$e->getMessage()));
		} 			
	}
	
	/**
	 * Metodo que monta o formulario de produto
	 * 
	 * @param 	id
	 * @return 	zend_form
	 */
	public function cadastroAction() {
            $this->_helper->layout->disableLayout();
            $obCategoriaRepositorio = new App_Model_CategoriaRepository();            
            $form = new App_Form_Produto();            
            $form->setAction('javascript:;');
            if( $this->_getParam('id') != '')
            {
                $where = App_Model_Db_Produto::build()->getAdapter()->quoteInto('co_produto = ?', $this->_getParam('id'));
                $obProduto = App_Model_Db_Produto::build()->fetchRow($where);
                if( !empty($obProduto) )
                {
                    $form->populate($obProduto->toArray());
                }			
            }
            $this->view->form = $form;
	}
	
	/**
	 * Metodo que salva o produto
	 * 
	 * @param 	co_produto
	 * @param 	no_produto
	 * @param 	nu_cnpj
	 * @param 	nu_inscricao
	 * @return 	json (resultado,retorno)
	 */
	public function salvarCadastroAction(){
		$this->_helper->layout->disableLayout();
		$this->_helper->viewRenderer->setNoRender();
		$form = new App_Form_Produto();
		try {
                    App_Model_Db_Produto::build()->getAdapter()->beginTransaction();

                    if(!$form->isValid($this->_getAllParams()))
                    {
                        throw new Voitech_ExceptionValidate('erro_validacao');
                    }
                    $obProduto = new App_Model_Produto();
                    $obProduto->setCoProduto($this->_getParam('co_produto'));
                    $obProduto->setNuTotalProduto($this->_getParam('nu_total_produto'));
                    $obProduto->setNoProduto($this->_getParam('no_produto'));
                                        
                    $obProduto->setObTipoProduto(new App_Model_TipoProduto($this->_getParam('co_tipo_produto')));
                    $obProduto->setObCategoria(new App_Model_Categoria($this->_getParam('co_categoria')));
                    
                    $obProduto->setObUsuarioCadastro(new App_Model_Usuario($this->view->user->getCoPessoa()));         

                    $obProdutoRepository = new App_Model_ProdutoRepository();
                    $obProdutoRepository->salvar($obProduto);
                    
                    App_Model_Db_Produto::build()->getAdapter()->commit();
                    echo $this->_helper->json(array('resultado'=>OK,'retorno'=>'Registro salvo com sucesso!.'));							
		}catch (Voitech_ExceptionValidate $e) {
			App_Model_Db_Produto::build()->getAdapter()->rollBack();
			//echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'Favor preencher corretamente os dados obrigatórios'));
                        echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'Favor preencher corretamente os dados obrigatórios'));
		}catch (Voitech_Exception $e) {
			App_Model_Db_Produto::build()->getAdapter()->rollBack();
			echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
		}catch (Exception $e) {
			App_Model_Db_Produto::build()->getAdapter()->rollBack();
                        Voitech_Log::gerarLog($e->getMessage());
			echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>'Erro ao alterar registro.'));
		}		
	}
	
	/**
	 * Metodo que altera o status do produto
	 * 
	 * @param 	co_produto
	 * @param 	st_ativo
	 * @return 	json resultado,retorno
	 */
	public function alterarStatusAction() {
		$this->_helper->layout->disableLayout();
		$this->_helper->viewRenderer->setNoRender();
		try {
                    App_Model_Db_Produto::build()->getAdapter()->beginTransaction();
                    $obProdutoRepository = new App_Model_ProdutoRepository();
                    if( $this->_getParam("st_ativo") == "S") {
                        $obProdutoRepository->ativar(new App_Model_Produto($this->_getParam('co_produto')));
                    }
                    else
                    {
                        $obProdutoRepository->desativar(new App_Model_Produto($this->_getParam('co_produto')));
                    }
                    App_Model_Db_Produto::build()->getAdapter()->commit();
                    echo $this->_helper->json(array('resultado'=>OK,'retorno'=>'Registro alterado com sucesso!.'));	
		
		}catch (Voitech_ExceptionValidate $e) {
			App_Model_Db_Produto::build()->getAdapter()->rollBack();
			echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'Favor preencher corretamente os dados obrigatórios'));
		}catch (Voitech_Exception $e) {
			App_Model_Db_Produto::build()->getAdapter()->rollBack();
			echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
		}catch (Exception $e) {
			App_Model_Db_Produto::build()->getAdapter()->rollBack();
                        Voitech_Log::gerarLog($e->getMessage());
			echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>$e->getMessage()));
		}		
	}
        
        /**
         * Buscar dados do produto por id
         * 
         * @param   co_produto
         * @return  json
         */
        public function buscarProdutoJsonAction(){
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
            $obProduto = new App_Model_Produto($this->_getParam('id'));
            $obProdutoMapper = new App_Model_ProdutoMapper($obProduto);
            $obProdutoMapper->buscarPorId();
            $arProduto = $obProdutoMapper->retornarArrayPopulado();         
//            $arProduto['no_pessoa'] = $obProdutoMapper->getObModel()
//                                                       ->getObCategoria()->getNoPessoa();
            echo $this->_helper->json(array('resultado'=>OK,'retorno'=>$arProduto));
        }
        
	/**
	 * Metodo apaga registro de Produto
	 * 
	 * @param 	co_Produto
	 * @return 	json resultado,retorno
	 */
	public function excluirAction() {
            $this->_helper->layout->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
            try {
                App_Model_Db_Produto::build()->getAdapter()->beginTransaction();                        
                $obProdutoRepository = new App_Model_ProdutoRepository();                        

                $obProdutoRepository->excluir(new App_Model_Produto($this->_getParam('co_produto')));
                
                App_Model_Db_Produto::build()->getAdapter()->commit();
                echo $this->_helper->json(array('resultado'=>OK,'retorno'=>'Registro excluido com sucesso!.'));				

            }catch (Voitech_ExceptionValidate $e) {
                App_Model_Db_Produto::build()->getAdapter()->rollBack();
                echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>$form->getErrors()));
            }catch (Voitech_Exception $e) {
                App_Model_Db_Produto::build()->getAdapter()->rollBack();
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
            }catch (Exception $e) {
                App_Model_Db_Produto::build()->getAdapter()->rollBack();
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>$e->getMessage()));
            }		
	}
	        
}

